package net.hn.hnms.biz.support.service;

import net.hn.hnms.biz.api.feign.model.DataStateVo;
import net.hn.hnms.biz.support.company.domain.vo.ChartVo;
import net.hn.hnms.biz.support.company.domain.vo.ChartXTwoVo;
import net.hn.hnms.biz.support.domain.BoreholealarmAbnormalPo;
import net.hn.hnms.biz.support.domain.SensorAlarmConfigPo;
import net.hn.hnms.biz.support.domain.SupportdataNowPo;
import net.hn.hnms.biz.support.domain.dto.*;
import net.hn.hnms.biz.support.domain.vo.*;
import net.hn.hnms.biz.support.group.domain.vo.AbscissdataAlarmListVo;
import net.hn.hnms.biz.support.group.domain.vo.AnchordataAlarmListVo;
import net.hn.hnms.biz.support.group.domain.vo.SupportdataAlarmListVo;
import net.hn.hnms.sys.common.core.domain.ResponsePage;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import org.springframework.data.repository.query.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @InterfaceName: CJDY RoofService
 * @Description CJDY顶板监测服务
 * @Author 王龙
 * @Date 2022-10-17
 * @Version 0.1
 */
public interface RoofService {
    /**
     * 支架监测
     * @param mineCode
     * @return
     */
    List<SupportdataNowPo> distinctSupportdataNow(String mineCode);


    /**
     * 最大离层量  获取实时表的所有数据 离层量= 深基点-浅基点
     * @return
     */
    BigDecimal getAnchordataNowListValue(@Param("mineCode") String mineCode);

    /**
     * 查询离层异常表中的所有煤矿信息
     * @return
     */
    Integer getRoofSeparationAnomaly();

    /**
     * 查询顶板离层测点信息数据
     * @return
     */
    Integer getRoofSeparationPoint();

    /**
     * 锚杆异常数
     * @return
     */
    Integer getRockBoltAnomaly();

    /**
     * 顶板离层报警曲线
     * @param number
     * @return
     */
    ChartVo riskStatistics(String number);

    /**
     * 锚杆测点数
     * @return
     */
    Integer getRockBoltPoint();

    /**
     * 钻孔应力异常数
     * @return
     */
    Integer getBoreholeStressAnomaly();

    /**
     * 钻孔应力测点数
     * @return
     */
    Integer getBoreholeStressPoint();

    /**
     * 地音异常数
     * @return
     */
    Integer getRockNoiseAnomaly();

    /**
     * 地音测点数
     * @return
     */
    Integer getRockNoisePoint();

    /**
     * 微震测点数
     * @return
     */
    Integer getSlightShockPoint();

    /**
     * 电磁辐射测点数
     * @return
     */
    Integer getElectromagneticRadiationPoint();

    /**
     * 微震次数变化曲线
     * @param number
     * @return
     */
    ChartVo riskStatisticsRockBurstQuake(String number);

    /**
     * 地音能量频次图
     * @param number
     * @return
     */
    ChartXTwoVo riskStatisticsRockBurstBorehole(String number);

    /**
     * 查询顶板报警,顶板数据在now表内，   离层量=深基点-浅基点  (报警条件为离层量>=50mm)
     * @return
     */
    List<AbscissdataNowDto> todayAlarm();

    /**
     * 钻孔应力报警（查询异常表内的数据）
     * @return
     */
    List<BoreholealarmAbnormalPo> BoreholealarmAbnormalList();

    /**
     * cjdy 支架服务
     * @param mineCode
     * @return
     */
    StatisticalInformationCJDYVo cjdyStatisticalInformation(String mineCode);

    /**
     * 安全综合概览-冲击地压onLine、max、min
     * @param type
     * @param mineCode
     * @return
     */
    Map<String,Number> extremum(String type, String mineCode);

    List<DataStateVo> getZjzlMaxTime(String mineCode, String companyCode);

    List<DataStateVo> getDblcMaxTime(String mineCode, String companyCode);
    List<DataStateVo> getMgylMaxTime(String mineCode, String companyCode);

    /**
     * 分页条件查询顶板离层实时数据
     * @param pageQuery
     * @param queryNowDto
     * @return
     */
    ResponsePage<AbscissQueryVo> abscissPageNowList(PageQuery pageQuery, QueryNowDto queryNowDto);

    /**
     * 分页条件查询锚杆索实时数据
     * @param pageQuery
     * @param queryNowDto
     * @return
     */
    ResponsePage<AnchorQueryVo> anchorPageNowList(PageQuery pageQuery, QueryNowDto queryNowDto);

    /**
     * 分页条件查询顶板离层历史数据
     * @param pageQuery
     * @param queryHisDto
     * @return
     */
    ResponsePage<AbscissQueryVo> abscissPageHisList(PageQuery pageQuery, QueryHisDto queryHisDto);

    /**
     * 分页条件查询锚杆索历史数据
     * @param pageQuery
     * @param queryHisDto
     * @return
     */
    ResponsePage<AnchorQueryVo> anchorPageHisList(PageQuery pageQuery, QueryHisDto queryHisDto);

    /**
     * 条件查询顶板离层历史数据测点曲线
     * @param pointDto
     * @return
     */
    ChartDateVo abscissPointHistoryCurve(PointDto pointDto);

    /**
     * 条件查询顶板离层历史数据测点列表
     * @param pointDto
     * @return
     */
    List<AbscissPointHistoryListVo> abscissPointHistoryList(PointDto pointDto);

    /**
     * 条件查询锚杆索历史数据测点曲线
     * @param pointDto
     * @return
     */
    ChartDateVo anchorPointHistoryCurve(PointDto pointDto);

    /**
     * 条件查询锚杆索历史数据测点列表
     * @param pointDto
     * @return
     */
    List<AnchorPointHistoryListVo> anchorPointHistoryList(PointDto pointDto);

    /**
     * 获取矿压监测（锚杆所.顶板.支架）BaseSensorTable表所有信息
     * @return
     */
    List<BaseSensorCoordDto> getKyjcBaseSensorTableAllList(String mineCode);

    /**
     * 获取冲击地压钻孔应力BaseSensorTable表所有信息
     * @return
     */
    List<BaseSensorCoordDto> getZkylBaseSensorTableAllList(String mineCode);

    /**
     * 获取顶板离层报警列表
     *
     * @param mineCode
     * @return
     */

    List<AbscissdataAlarmListVo> getAbscissAlarmList(String mineCode);

    /**
     * 获取今日锚杆索报警列表
     * @param mineCode
     * @return
     */
    List<AnchordataAlarmListVo> getTodayAnchordataAlarmList(String mineCode);

    /**
     * 获取今日支架报警列表
     * @param mineCode
     * @return
     */
    List<SupportdataAlarmListVo> getTodaySupportdataAlarmList(String mineCode);

    /**
     * 根据类型获取设备超限阈值
     * @param type
     * @param mineCode
     * @return
     */
    SensorAlarmConfigPo exceedsThresholdByType(String type, String mineCode);

    RoofBaseInfoVo getRoofBaseInfo(String mineCode);
}
